#! /usr/bin/env python
# -*- coding: utf-8 -*-
"""
@File Name: 程序范围内的全局对象_SharedNames.py
@Author: LTisme
@Date: 2021/8/29 14:25
# -----------------------------------------------------------------------------------------------------
@Description: 
实现了一个在程序范围内共享的命名空间，它涵盖了大部分模块里要用到的资源；
这样可以避免其他文件重复导入公用模块，并把包导入的位置封装起来————这样将来若改变了路径，也只用修改这个文件。
# -----------------------------------------------------------------------------------------------------
"""

# 这个程序的名字——所有窗口，图标标题都用得到
appname = 'PyMailGUI'

# 用于列表保存、打开和删除；也用于已发送的邮件文件
saveMailSeparator = 'PyMailGUI' + '-' * 60 + 'PyMailGUI\n'

# 用于保存当前查看的邮件为本地文件；也用于已发送邮件保存文件
openSaveFiles = {}                                              # 每个文件一个窗口，格式为：{名称: 窗口}

# 标准库服务
import sys, os
import email.utils                                              # 一系列邮件相关的工具都在这包里，比如从题头解析地址，比如生成日期等
import email.message                                            # 用于创建根邮件实例
import webbrowser                                               # 用于打开html附件
import mimetypes                                                # 用来猜测文件类型，扩展名用
from tkinter import *                                           # 下面都是tkinter相关的
from tkinter.simpledialog import askstring
from tkinter.filedialog import SaveAs, Open, Directory
from tkinter.messagebox import showinfo, showerror, askyesno

# 复用之前作者写过的示例
from .需要复用的_作者之前写过的各种用例 import 顶层窗口的_图标文件配置_退出协议设定_windows as windows
from .需要复用的_作者之前写过的各种用例 import 线程回调队列检查工具_threadtools as threadtools
from .需要复用的_作者之前写过的各种用例.邮件查看窗口和某些弹出窗口中用到的文本组件 import 主要的实现文件textEditor as textEditor
from .需要复用的_作者之前写过的各种用例 import 服务器的发送_接收_解析及开发程序包_mailtools as mailtools

# 此处新定义的模块
from . import PyMailGui专用邮件配置模块_mailconfig as mailconfig
from . import 通用的GUI弹出窗口_popuputil as popuputil
from . import 换行工具_wraplines as wraplines
from . import 邮件缓存管理器_messagecache as messagecache
from . import 从HTML中提取Text文本_html2text as html2text
from . import 用户帮助文本与显示_PyMailGUIHelp as PyMailGuiHelp


def printStack(exc_info):
    """
    调试用函数：在标准输出中显示异常和追踪堆栈；
    如果追踪堆栈打印到sys.stdou失败，则打印到实际的日志文件里去——仅在windows下其他程序启动时采取此做法；
    如果没有这个解决方案的话，PyMailGUI将会中止并退出，因为这是在派生线程运行失败时主线程中的调用；
    """
    print(exc_info[0])
    print(exc_info[1])
    import traceback

    try:
        # print_tb是打印traceback的意思
        traceback.print_tb(exc_info[2], file=sys.stdout)         # 只要不在派生线程里就没有问题！
    except:
        log = open('_pymailerrlog.txt', 'a')
        log.write('-' * 80)
        traceback.print_tb(exc_info[2], file=log)


# 用于记录这个GUI所运行线程的忙碌线程计数器
# sendingBusy在所有发送窗口间共享，在主窗口退出时采用
loadingHdrsBusy = threadtools.ThreadCounter()                   # 只有一个
deletingBusy = threadtools.ThreadCounter()                      # 只有一个
loadingMsgsBusy = threadtools.ThreadCounter()                   # 可能有很多
sendingBusy = threadtools.ThreadCounter()                       # 可能有很多
